1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| #include<stdio.h> #include<malloc.h> #include<stdlib.h>
void CountSort(int* arrayA,int* arrayD,int n,int k); void RadixSort(int* arrayA,int n);
void main() { int arrayD[]={1046,2084,9046,12074,56,7026,8099,17059,33,1}; int n=sizeof(arrayD)/sizeof(int); RadixSort(arrayD,n);
for(int i=0;i<n;i++) printf("%d ",arrayD[i]); printf("\n");
}
void RadixSort(int* arrayD,int n) { int base=1; int* arrayA=(int*)malloc(sizeof(int)*n); for(int k=0;k<5;k++) { base*=10; for(int i=0;i<n;i++) { arrayA[i]=arrayD[i]%base; arrayA[i]/=base/10; } CountSort(arrayA,arrayD,n,10); } free(arrayA); }
void CountSort(int* arrayA,int*arrayD,int n,int k) { int* arrayB=(int*)malloc(sizeof(int)*n); int* arrayC=(int*)malloc(sizeof(int)*k);
for(int i=0;i<=k;i++) arrayC[i]=0; for(int j=0;j<n;j++) arrayC[arrayA[j]]=arrayC[arrayA[j]]+1; for(int i=1;i<=k;i++) arrayC[i]=arrayC[i]+arrayC[i-1]; for(int j=n-1;j>=0;j--) { arrayB[arrayC[arrayA[j]]-1]=arrayD[j]; arrayC[arrayA[j]]=arrayC[arrayA[j]]-1; } for(int i=0;i<n;i++) { arrayD[i]=arrayB[i]; } }
|